<template>
        <slot v-if="show"/>
</template>
<script setup>
    import { ref,onMounted,nextTick } from 'vue';
    import { ElMessageBox } from 'element-plus'
    import { useUserStore } from '@/pinia/modules/user'
    import { emitter } from '@/utils/bus.js'
    const userStore = useUserStore()
    // code对应权限树接口中的编码（permission），（每个菜单或者操作按钮都对应的编码）
    // tips提示信息
    // popup弹窗提示tips
    const props = defineProps({
        code:{
            type:String,
            default:''
        },
        tips:"",
        popup:""
    }) 
    const show = ref(false)
    const plists = userStore.userInfo.permissionArr // 权限数组

    if(props.code.indexOf("|")>-1){ // 说明有多个编码，并且“|”分割，处理逻辑：只要有一个编码在权限列表中时就显示
        const codeArr = props.code.split('|')
        for(let i=0;i<codeArr.length;i++){
            if(plists.indexOf(codeArr[i])>-1){ // 说明存在权限，则显示(只要有一个存在，就显示)
                show.value = true
                break   
            }
        }
    }else if(props.code.indexOf("&")>-1){  //说明有多个编码，并且“&”分割，处理逻辑：必须所有编码都在权限列表中才显示
        const codeArr = props.code.split('&')
        let num = 0
        for(let i=0;i<codeArr.length;i++){
            if(plists.indexOf(codeArr[i])>-1){ 
                num++ 
            }
        }
        // 说明都在权限列表中
        if(num>=codeArr.length){
            show.value = true 
        }

    }else if(plists.indexOf(props.code)>-1){  // 只有一个编码。处理逻辑：编码在权限列表中就显示
        show.value = true 
    }


    const init = async ()=>{
        await nextTick()
        if(!show.value){
            ElMessageBox.confirm(props.tips,'提示',
            {
                confirmButtonText: '确定',
                showCancelButton:false,
                type: 'warning',
            }
            ).then(async () => {
                emitter.emit('closeThisPage') // 关闭当前页面
            }).catch(() => {
                
            })
        }
    }
    defineExpose({init})
    
</script>
<style lang="scss">
    .authtagstyle{
        display: inline;
    }
</style>